package futbol.tacticas.concursantes2007.ValentinitaTeam;

import futbol.tacticas.concursantes.Tactica;

import java.awt.*;
import java.util.Vector;
import futbol.tacticas.*;


public class TacticaDiego06 implements Tactica{

    private int nValores[][]={
        {-150,    0, 6},  // Jugador 0
        {-120,  -30, 7},  // Jugador 1
        {-120,   30, 7},  // Jugador 2
        { -10,  -90, 5},  // Jugador 3
        { -80,    0, 5},  // Jugador 4
        { -10,   90, 5},  // Jugador 5
        { 100,  -60, 7},  // Jugador 6
        {  65,    0, 6},  // Jugador 7
        { 100,  110, 0},  // Jugador 8
        { 100, -110, 0},  // Jugador 9
        { 100,  60,  7}    // Jugador 10


    };


    private boolean flag = false;


    public Color getColor1() {
        return Color.RED;
    }

    public Color getColor2() {
        return new Color(128,96,198);
    }

    public Color getColorNumero() {
        return Color.WHITE;
    }

    public String getNombre() {
        return "Valentinita Team";
    }

    public int getXInicial(int n) {
        return nValores[n][0];
    }

    public int getYInicial(int n) {
        return nValores[n][1];
    }

    public int getFuerza(int n) {
        return nValores[n][2];
    }

    public Vector<Comando> getComandos(SituacionJugadores sj) {
        Vector<Comando> com=new Vector();
        //Posicionamiento
        for (int n=0;n<11;n++)
            com.add(new ComandoIrA(n,nValores[n][0],nValores[n][1]));


        Point bola=sj.getBola();
        Point yo[]=sj.getMisJugadores();
        Point el[]=sj.getContrario();
        int defensaMasCerca = 0;
        int medioMasCerca = 0;

        //Movimiento portero
        int y=(int)(bola.getY());
        if (y<-33) y=-33;
        if (y>33) y=33;
        com.add(new ComandoIrA(0,nValores[0][0], y));


        //Cambio el angulo de tiro del portero para cada golpe
        if (flag == false) {
            com.add(new ComandoGolpearBola(0,10,-110));
            flag = true;

        } else {
            com.add(new ComandoGolpearBola(0,10,110));
            flag = false;

        }

        //Mi defensa para parar los tiro al arco
        if (yo[6].getX() < 70) {
            for (int n=1;n<3;n++)
                com.add(new ComandoIrA(n,bola.getX(), bola.getY()));
        }




        //Pase 4 al mas cerca (1 y 2)
        int masCerca = 0;
        if (bola.getY() <= 0) {
            masCerca = 3;
        } else {
            masCerca = 5;

        }
        com.add(new ComandoPase(4,masCerca));
        defensaMasCerca = masCerca;

        com.add(new ComandoPase(1,3));
        com.add(new ComandoPase(9,6));
        com.add(new ComandoPase(2,5));
        com.add(new ComandoPase(8,10));



        //Para que los tiros al arco salgan cruzados
        int desvioTiro;
        if ((int)(bola.getY()) >= 0)
            desvioTiro = -15;
        else
            desvioTiro = 15;

        com.add(new ComandoTiroAPuerta(3,0));
        com.add(new ComandoTiroAPuerta(5,0));
        com.add(new ComandoTiroAPuerta(6,0));
        com.add(new ComandoTiroAPuerta(10,0));
        com.add(new ComandoTiroAPuerta(7,0));


        int topeArquero = -120;        
        int topeDefensa = -60;
        int topeMedio = 40;        
        int topeDelantera = 70;
        int lateralDerecho = 40;
        int lateralIzquierdo = -40;



        // Si la pelota esta en mi campo es de la defensa.
        int miX = 0;
        if (bola.getX() < topeDefensa) {

            if (yo[6].getX() < topeDelantera) {
                for (int n=1;n<3;n++)
                    com.add(new ComandoIrA(n,bola.getX(), bola.getY()));
            } else {
                if (bola.getX() <= topeArquero ) {
                    com.add(new ComandoIrA(1,bola.getX(), bola.getY()));
                    com.add(new ComandoIrA(2,bola.getX(), bola.getY()));

                } else {
                    com.add(new ComandoIrA(4,bola.getX(), bola.getY()));
                    com.add(new ComandoIrA(defensaMasCerca,bola.getX(), bola.getY()));

                }
            }

        } else {

            if (bola.getX() > topeMedio) {
                // Si la pelota esta en la delantera es del 9 o 10
                if ( bola.getY() >= lateralDerecho ) {
                    com.add(new ComandoIrA(8,bola.getX(), bola.getY()));
                    com.add(new ComandoIrA(10,bola.getX(), bola.getY()));

                } else {

                    if ( bola.getY() <= lateralIzquierdo ) {
                        com.add(new ComandoIrA(9,bola.getX(), bola.getY()));
                        com.add(new ComandoIrA(6,bola.getX(), bola.getY()));

                    } else {
                        com.add(new ComandoIrA(7,bola.getX(), bola.getY()));

                    }

                }

            } else {

                if (bola.getY() < -40) {
                    com.add(new ComandoIrA(3,bola.getX(), bola.getY()));

                } else {

                    if (bola.getY() > 40) {
                        com.add(new ComandoIrA(5,bola.getX(), bola.getY()));

                    } else {

                        com.add(new ComandoIrA(7,bola.getX(), bola.getY()));
                    }
                }
            }
        }

        return com;
    }


    /**
        Si diff < 1 implica que tengo un defensor contrario por delante
        Si diff*-1 < peligro implica que ademas de estar por delante me esta marcando

        Por lo tanto, para true debo moverme de lateral.
        Para false debo seguir sin cambios.
    **/
    private boolean elDefienteX(int yoX, int elX) {
        int peligro = 20;

        int diff = yoX - elX;

        if (diff < 1) if (diff*-1 < peligro) return true;

        return false;

    }

}
